package cn.iocoder.yudao.module.shop.service.statistics;

import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletRechargeDO;
import cn.iocoder.yudao.module.shop.controller.admin.member.vo.MemberUserStatisticsReqVO;
import cn.iocoder.yudao.module.shop.controller.admin.statistics.vo.*;
import cn.iocoder.yudao.module.shop.dal.dataobject.order.ShopOrderDO;
import cn.iocoder.yudao.module.shop.dal.dataobject.statistics.ShopMemberStatisticsDO;
import cn.iocoder.yudao.module.shop.dal.dataobject.statistics.ShopUserStatisticsDO;
import cn.iocoder.yudao.module.shop.dal.dataobject.statistics.ShopWalletStatisticsDO;

import java.time.LocalDate;
import java.time.LocalDateTime;

public interface ShopStatisticsService {

    ShopMemberStatisticsDO getMemberStatistics(MemberUserStatisticsReqVO reqVO);

    ShopWalletStatisticsDO getWalletStatistics(MemberUserStatisticsReqVO reqVO);

    ShopUserStatisticsDO getUserStatistics(Long userId);

    ShopJiuliangStatisticsRespVO getJiuliangStatistics(Long tenantId, LocalDateTime startTime, LocalDateTime endTime);

    ShopRechargeStatisticsRespVO getRechargeStatistics(Long tenantId, LocalDateTime startTime, LocalDateTime endTime);

//    ShopAccountStatisticsRespVO getAccountStatistics(LocalDateTime startTime, LocalDateTime endTime);

    ShopJiucaseStatisticsRespVO getJiucaseStatistics(LocalDateTime startTime, LocalDateTime endTime);

    Boolean recordOrder(ShopOrderDO order);

    Boolean recordPayOrder(PayWalletRechargeDO payOrder, Long memberId, Long masterId, Boolean isFirst);

    Boolean recordTimesChargePay(Integer payPrice, Long memberId, Long masterId, Boolean isFirst, Long tenantId);

    ShopSalaryStatisticsRespVO getSalaryDetail(LocalDateTime startTime, LocalDateTime endTime, Long tenantId);

    ShopStatisticsRespVO getShopDetail(LocalDateTime startTime, LocalDateTime endTime, Long tenantId);

    ShopDayStatisticsRespVO getShopDayDetail(LocalDateTime dateTime, Long tenantId);

    Boolean rollbackOrder(ShopOrderDO order);

    Boolean recordHoliday(LocalDateTime time, Long masterId);

    void dayJob();
}
